//Original:/testcases/core/c_dsp32shiftim_lhalf_lp/c_dsp32shiftim_lhalf_lp.dsp
// Spec Reference: dspshiftimm dreg_lo(hi) = lshift (dreg_lo(hi) by imm5)
# mach: bfin

.include "testutils.inc"
	start



// lshift : positive data, count (+)=left (half reg)
// d_lo = lshift (d_lo BY imm5)
// RLx by imm5
imm32 r0, 0x00100a00;
imm32 r1, 0x00100a01;
imm32 r2, 0x00100a02;
imm32 r3, 0x00100a03;
imm32 r4, 0x00100a04;
imm32 r5, 0x00100a05;
imm32 r6, 0x00100a06;
imm32 r7, 0x00100a07;
R7.L = R0.L << 0;
R0.L = R1.L << 1;
R1.L = R2.L << 2;
R2.L = R3.L << 3;
R3.L = R4.L << 4;
R4.L = R5.L << 5;
R5.L = R6.L << 6;
R6.L = R7.L << 7;
CHECKREG r1, 0x00102808;
CHECKREG r0, 0x00101402;
CHECKREG r2, 0x00105018;
CHECKREG r3, 0x0010A040;
CHECKREG r4, 0x001040A0;
CHECKREG r5, 0x00108180;
CHECKREG r6, 0x00100000;
CHECKREG r7, 0x00100A00;

imm32 r0, 0x00200018;
imm32 r1, 0x00200019;
imm32 r2, 0x0020001a;
imm32 r3, 0x0020001b;
imm32 r4, 0x0020001c;
imm32 r5, 0x0020001d;
imm32 r6, 0x0020001e;
imm32 r7, 0x0020001f;
R2.L = R0.L << 8;
R3.L = R1.L << 9;
R4.L = R2.L << 10;
R5.L = R3.L << 11;
R6.L = R4.L << 12;
R7.L = R5.L << 13;
R0.L = R6.L << 14;
R1.L = R7.L << 15;
CHECKREG r0, 0x00200000;
CHECKREG r1, 0x00200000;
CHECKREG r2, 0x00201800;
CHECKREG r3, 0x00203200;
CHECKREG r4, 0x00200000;
CHECKREG r5, 0x00200000;
CHECKREG r6, 0x00200000;
CHECKREG r7, 0x00200000;

imm32 r0, 0x05002001;
imm32 r1, 0x05002001;
imm32 r2, 0x0500000f;
imm32 r3, 0x05002003;
imm32 r4, 0x05002004;
imm32 r5, 0x05002005;
imm32 r6, 0x05002006;
imm32 r7, 0x05002007;
R3.L = R0.L << 0;
R4.L = R1.L << 1;
R5.L = R2.L << 2;
R6.L = R3.L << 3;
R7.L = R4.L << 4;
R0.L = R5.L << 5;
R1.L = R6.L << 6;
R2.L = R7.L << 7;
CHECKREG r0, 0x05000780;
CHECKREG r1, 0x05000200;
CHECKREG r2, 0x05001000;
CHECKREG r3, 0x05002001;
CHECKREG r4, 0x05004002;
CHECKREG r5, 0x0500003C;
CHECKREG r6, 0x05000008;
CHECKREG r7, 0x05000020;

imm32 r0, 0x03000031;
imm32 r1, 0x03000031;
imm32 r2, 0x03000032;
imm32 r3, 0x03000030;
imm32 r4, 0x03000034;
imm32 r5, 0x03000035;
imm32 r6, 0x03000036;
imm32 r7, 0x03000037;
R4.L = R0.L << 8;
R5.L = R1.L << 9;
R6.L = R2.L << 10;
R7.L = R3.L << 11;
R0.L = R4.L << 12;
R1.L = R5.L << 13;
R2.L = R6.L << 14;
R3.L = R7.L << 15;
CHECKREG r0, 0x03000000;
CHECKREG r1, 0x03000000;
CHECKREG r2, 0x03000000;
CHECKREG r3, 0x03000000;
CHECKREG r4, 0x03003100;
CHECKREG r5, 0x03006200;
CHECKREG r6, 0x0300C800;
CHECKREG r7, 0x03008000;
// RHx by RLx
imm32 r0, 0x03000000;
imm32 r1, 0x03000000;
imm32 r2, 0x03000000;
imm32 r3, 0x03000000;
imm32 r4, 0x03003100;
imm32 r5, 0x03006200;
imm32 r6, 0x0300C800;
imm32 r7, 0x03008000;
R5.L = R0.H << 0;
R6.L = R1.H << 1;
R7.L = R2.H << 2;
R0.L = R3.H << 3;
R1.L = R4.H << 4;
R2.L = R5.H << 5;
R3.L = R6.H << 6;
R4.L = R7.H << 7;
CHECKREG r0, 0x03001800;
CHECKREG r1, 0x03003000;
CHECKREG r2, 0x03006000;
CHECKREG r3, 0x0300C000;
CHECKREG r4, 0x03008000;
CHECKREG r5, 0x03000300;
CHECKREG r6, 0x03000600;
CHECKREG r7, 0x03000C00;

imm32 r0, 0x05018000;
imm32 r1, 0x05018001;
imm32 r2, 0x05028000;
imm32 r3, 0x05038000;
imm32 r4, 0x05048000;
imm32 r5, 0x05058000;
imm32 r6, 0x05068000;
imm32 r7, 0x05078000;
R6.L = R0.H << 8;
R7.L = R1.H << 9;
R0.L = R2.H << 10;
R1.L = R3.H << 11;
R2.L = R4.H << 12;
R3.L = R5.H << 13;
R4.L = R6.H << 14;
R5.L = R7.H << 15;
CHECKREG r0, 0x05010800;
CHECKREG r1, 0x05011800;
CHECKREG r2, 0x05024000;
CHECKREG r3, 0x0503A000;
CHECKREG r4, 0x05048000;
CHECKREG r5, 0x05058000;
CHECKREG r6, 0x05060100;
CHECKREG r7, 0x05070200;


imm32 r0, 0x60019000;
imm32 r1, 0x60019000;
imm32 r2, 0x6002900f;
imm32 r3, 0x60039000;
imm32 r4, 0x60049000;
imm32 r5, 0x60059000;
imm32 r6, 0x60069000;
imm32 r7, 0x60079000;
R7.L = R0.H << 0;
R0.L = R1.H << 1;
R1.L = R2.H << 2;
R2.L = R3.H << 3;
R3.L = R4.H << 4;
R4.L = R5.H << 5;
R5.L = R6.H << 6;
R6.L = R7.H << 7;
CHECKREG r0, 0x6001C002;
CHECKREG r1, 0x60018008;
CHECKREG r2, 0x60020018;
CHECKREG r3, 0x60030040;
CHECKREG r4, 0x600400A0;
CHECKREG r5, 0x60050180;
CHECKREG r6, 0x60060380;
CHECKREG r7, 0x60076001;

imm32 r0, 0x70010001;
imm32 r1, 0x70010001;
imm32 r2, 0x70020002;
imm32 r3, 0x77030010;
imm32 r4, 0x70040004;
imm32 r5, 0x70050005;
imm32 r6, 0x70060006;
imm32 r7, 0x70070007;
R0.L = R0.H << 8;
R1.L = R1.H << 9;
R2.L = R2.H << 10;
R3.L = R3.H << 11;
R4.L = R4.H << 12;
R5.L = R5.H << 13;
R6.L = R6.H << 14;
R7.L = R7.H << 15;
CHECKREG r0, 0x70010100;
CHECKREG r1, 0x70010200;
CHECKREG r2, 0x70020800;
CHECKREG r3, 0x77031800;
CHECKREG r4, 0x70044000;
CHECKREG r5, 0x7005A000;
CHECKREG r6, 0x70068000;
CHECKREG r7, 0x70078000;

// d_hi = lshft (d_lo BY d_lo)
// RLx by RLx
imm32 r0, 0xa8000000;
imm32 r1, 0xa8000001;
imm32 r2, 0xa8000002;
imm32 r3, 0xa8000003;
imm32 r4, 0xa8000004;
imm32 r5, 0xa8000005;
imm32 r6, 0xa8000006;
imm32 r7, 0xa8000007;
R0.H = R0.L << 0;
R1.H = R1.L << 1;
R2.H = R2.L << 2;
R3.H = R3.L << 3;
R4.H = R4.L << 4;
R5.H = R5.L << 5;
R6.H = R6.L << 6;
R7.H = R7.L << 7;
CHECKREG r0, 0x00000000;
CHECKREG r1, 0x00020001;
CHECKREG r2, 0x00080002;
CHECKREG r3, 0x00180003;
CHECKREG r4, 0x00400004;
CHECKREG r5, 0x00A00005;
CHECKREG r6, 0x01800006;
CHECKREG r7, 0x03800007;

imm32 r0, 0xf0090001;
imm32 r1, 0xf0090001;
imm32 r2, 0xf0090002;
imm32 r3, 0xf0090003;
imm32 r4, 0xf0090004;
imm32 r5, 0xf0090005;
imm32 r6, 0xf0000006;
imm32 r7, 0xf0000007;
R1.H = R0.L << 8;
R2.H = R1.L << 9;
R3.H = R2.L << 10;
R4.H = R3.L << 11;
R5.H = R4.L << 12;
R6.H = R5.L << 13;
R7.H = R6.L << 14;
R0.H = R7.L << 15;
CHECKREG r1, 0x01000001;
CHECKREG r2, 0x02000002;
CHECKREG r3, 0x08000003;
CHECKREG r4, 0x18000004;
CHECKREG r5, 0x40000005;
CHECKREG r6, 0xA0000006;
CHECKREG r7, 0x80000007;
CHECKREG r0, 0x80000001;


imm32 r0, 0x07000001;
imm32 r1, 0x07000001;
imm32 r2, 0x0700000f;
imm32 r3, 0x07000003;
imm32 r4, 0x07000004;
imm32 r5, 0x07000005;
imm32 r6, 0x07000006;
imm32 r7, 0x07000007;
R3.H = R0.L << 0;
R4.H = R1.L << 1;
R5.H = R2.L << 2;
R6.H = R3.L << 3;
R7.H = R4.L << 4;
R0.H = R5.L << 5;
R1.H = R6.L << 6;
R2.H = R7.L << 7;
CHECKREG r0, 0x00A00001;
CHECKREG r1, 0x01800001;
CHECKREG r2, 0x0380000F;
CHECKREG r3, 0x00010003;
CHECKREG r4, 0x00020004;
CHECKREG r5, 0x003C0005;
CHECKREG r6, 0x00180006;
CHECKREG r7, 0x00400007;

imm32 r0, 0x00000501;
imm32 r1, 0x00000501;
imm32 r2, 0x00000502;
imm32 r3, 0x00000510;
imm32 r4, 0x00000504;
imm32 r5, 0x00000505;
imm32 r6, 0x00000506;
imm32 r7, 0x00000507;
R4.H = R0.L << 8;
R5.H = R1.L << 9;
R6.H = R2.L << 10;
R7.H = R3.L << 11;
R0.H = R4.L << 12;
R1.H = R5.L << 13;
R2.H = R6.L << 14;
R3.H = R7.L << 15;
CHECKREG r0, 0x40000501;
CHECKREG r1, 0xA0000501;
CHECKREG r2, 0x80000502;
CHECKREG r3, 0x80000510;
CHECKREG r4, 0x01000504;
CHECKREG r5, 0x02000505;
CHECKREG r6, 0x08000506;
CHECKREG r7, 0x80000507;

imm32 r0, 0x00a00800;
imm32 r1, 0x00a10800;
imm32 r2, 0x00a20800;
imm32 r3, 0x00a30800;
imm32 r4, 0x00a40800;
imm32 r5, 0x00a50800;
imm32 r6, 0x00a60800;
imm32 r7, 0x00a70800;
R5.H = R0.H << 0;
R6.H = R1.H << 1;
R7.H = R2.H << 2;
R0.H = R3.H << 3;
R1.H = R4.H << 4;
R2.H = R5.H << 5;
R3.H = R6.H << 6;
R4.H = R7.H << 7;
CHECKREG r0, 0x05180800;
CHECKREG r1, 0x0A400800;
CHECKREG r2, 0x14000800;
CHECKREG r3, 0x50800800;
CHECKREG r4, 0x44000800;
CHECKREG r5, 0x00A00800;
CHECKREG r6, 0x01420800;
CHECKREG r7, 0x02880800;

imm32 r0, 0x0c010000;
imm32 r1, 0x0c010001;
imm32 r2, 0x0c020000;
imm32 r3, 0x0c030000;
imm32 r4, 0x0c040000;
imm32 r5, 0x0c050000;
imm32 r6, 0x0c060000;
imm32 r7, 0x0c070000;
R6.H = R0.H << 8;
R7.H = R1.H << 9;
R0.H = R2.H << 10;
R1.H = R3.H << 11;
R2.H = R4.H << 12;
R3.H = R5.H << 13;
R4.H = R6.H << 14;
R5.H = R7.H << 15;
CHECKREG r0, 0x08000000;
CHECKREG r1, 0x18000001;
CHECKREG r2, 0x40000000;
CHECKREG r3, 0xA0000000;
CHECKREG r4, 0x00000000;
CHECKREG r5, 0x00000000;
CHECKREG r6, 0x01000000;
CHECKREG r7, 0x02000000;


imm32 r0, 0x00b10000;
imm32 r1, 0x00b10000;
imm32 r2, 0x00b2000f;
imm32 r3, 0x00b30000;
imm32 r4, 0x00b40000;
imm32 r5, 0x00b50000;
imm32 r6, 0x00b60000;
imm32 r7, 0x00b70000;
R7.L = R0.H << 0;
R0.L = R1.H << 1;
R1.L = R2.H << 2;
R2.L = R3.H << 3;
R3.L = R4.H << 4;
R4.L = R5.H << 5;
R5.L = R6.H << 6;
R6.L = R7.H << 7;
CHECKREG r0, 0x00B10162;
CHECKREG r1, 0x00B102C8;
CHECKREG r2, 0x00B20598;
CHECKREG r3, 0x00B30B40;
CHECKREG r4, 0x00B416A0;
CHECKREG r5, 0x00B52D80;
CHECKREG r6, 0x00B65B80;
CHECKREG r7, 0x00B700B1;

imm32 r0, 0x0a010700;
imm32 r1, 0x0a010700;
imm32 r2, 0x0a020700;
imm32 r3, 0x0a030710;
imm32 r4, 0x0a040700;
imm32 r5, 0x0a050700;
imm32 r6, 0x0a060700;
imm32 r7, 0x0a070700;
R0.H = R0.H << 8;
R1.H = R1.H << 9;
R2.H = R2.H << 10;
R3.H = R3.H << 11;
R4.H = R4.H << 12;
R5.H = R5.H << 13;
R6.H = R6.H << 14;
R7.H = R7.H << 15;
CHECKREG r0, 0x01000700;
CHECKREG r1, 0x02000700;
CHECKREG r2, 0x08000700;
CHECKREG r3, 0x18000710;
CHECKREG r4, 0x40000700;
CHECKREG r5, 0xA0000700;
CHECKREG r6, 0x80000700;
CHECKREG r7, 0x80000700;

pass
